package info.motteke.mixivoice4j;


public interface MixiVoiceCache {

    /**
     * ボイスを取得します。
     *
     * @param <T>
     *            ボイスの型
     * @param postId
     *            ボイスの投稿ID
     * @param owner
     *            ボイスの発言者
     * @param clazz
     *            ボイスのクラス
     *
     * @return ボイスのインスタンス。無ければnullを返す。
     */
    public <T extends Voice> T getVoice(long postId, User owner, Class<T> clazz);

    /**
     * ボイスを保存します。
     *
     * @param voice
     *            ボイス
     */
    public void addVoice(Voice voice);

    /**
     * ユーザを取得します。
     *
     * @param id
     *            ユーザID
     * @return ユーザのインスタンス。無ければnullを返す。
     */
    public User getUser(long id);

    /**
     * ユーザを保存します。
     *
     * @param user
     *            ユーザ
     */
    public void addUser(User user);
}
